var exec = require("child_process").exec;
var querystring = require("querystring");
var fs = require("fs");
var formidable = require("formidable");


function start(response){
    console.log("Request handler 'start' was called.");

    var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" '+
    'content="text/html; charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<form action="/upload" enctype="multipart/form-data" '+
    'method="post">'+
    '<input type="file" name="upload">'+
    '<input type="submit" value="Upload file" />'+
    '</form>'+
    '</body>'+
    '</html>';

    response.writeHead(200, {"Content-Type": "text/html"});
    response.write(body);
    response.end();
}

function upload(response,request){
    console.log("Request handler 'upload' was called.");

    var form = new formidable.IncomingForm();
    /*伪bug(权限)*/

    /* 代码解决方式1*/
    form.uploadDir = "tmp";
    /*end 1*/

    form.parse(request,function(error,fields,files){
        fs.renameSync(files.upload.path,"./tmp/test.png");

        /* 代码解决方式2*/
        // var readStream = fs.createReadStream(files.upload.path);
        // var writeStream = fs.createWriteStream("./tmp/test.png");
        // readStream.pipe(writeStream);
        // readStream.on("end",function(){
        //     fs.unlinkSync(files.upload.path);
        // });
        /*end 2*/
        response.writeHead(200, {"Content-Type": "text/html;charset=utf-8"});
        response.write("received image:<br/>");
        response.write("<img src='/show' />");
        response.end();
    });
}

function show(response){
    console.log("show被调用了");
    fs.readFile("./tmp/test.png","binary",function(error,file){
        if (error) {
            response.writeHead(500,{"Content-Type": "text/plain"});
            response.write(error+"\n");
            response.end();
        }
        else {
            // 访问图片代码片段
            response.writeHead(200,{"Content-Type": "image/png"});
            response.write(file,"binary");
            response.end();
        }
    });
}

exports.start = start;
exports.upload = upload;
exports.show = show;
